package com.example.demo;

import java.util.*;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

@Api(tags = "用户管理")
@RestController
@RequestMapping(value = "/db_users") // 通过这里配置使下面的映射都在/db_users下
public class UserDbController {

    // 这里可以换成userServiceJdbcTemplateImpl或者userServiceJpaImpl，使用JdbcTemplate或者Jpa引擎
    @Autowired
    @Qualifier("userServiceJpaImpl")
    private UserService userSerivce;

    /**
     * 处理"/users/"的GET请求，用来获取用户列表
     *
     * @return
     */
    @GetMapping("/")
    @ApiOperation(value = "获取用户列表")
    public List<User> getUserList() {
        // 还可以通过@RequestParam从页面中传递参数来进行查询条件或者翻页信息的传递
        List<User> r = new ArrayList<User>(userSerivce.getPageAllUsers(1, 2));
        return r;
    }

    /**
     * 处理"/users/page"的GET请求，用来获取用户列表
     *
     * @return
     */
    @GetMapping("/page")
    @ApiOperation(value = "获取用户列表（分页）")
    public Page<User> getUserListPage() {
        // 还可以通过@RequestParam从页面中传递参数来进行查询条件或者翻页信息的传递
        Page<User> r = userSerivce.getPageInfoAllUsers(1, 2);
        return r;
    }

    /**
     * 处理"/users/"的POST请求，用来创建User
     *
     * @param user
     * @return
     */
    @PostMapping("/")
    @ApiOperation(value = "创建用户", notes = "根据User对象创建用户")
    public String postUser(@Valid @RequestBody User user) {
        // @RequestBody注解用来绑定通过http请求中application/json类型上传的数据
        userSerivce.create(user.getName(), user.getAge(), user.getEmail());
        return "success";
    }

}